#ifndef BACKTESTWIDGET_H
#define BACKTESTWIDGET_H
#include <iostream>
#include <QWidget>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QTabWidget>
#include <QWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QPushButton>
#include <QFileDialog>
#include <QTableWidget>
#include <QChart>
#include <QChartView>
#include <QRubberBand>
#include <QMouseEvent>
#include <QWheelEvent>
#include <QList>
#include <QLineSeries>
#include <QCandlestickSeries>
#include <QCandlestickSet>
#include <QValueAxis>
#include <QDateTimeAxis>
#include <QComboBox>
#include <QLabel>
#include <QSpinBox>
#include <QDoubleSpinBox>
#include <QGroupBox>
#include <QFormLayout>
#include <QTextEdit>
#include <QHeaderView>
#include <QDateTime>
#include <QFile>
#include <QTextStream>
#include <QVector>
#include <QMessageBox>
#include <cmath>
#include <algorithm>
#include <QValueAxis>
#include <QtCharts/QBarCategoryAxis>
#include <QtCharts/QScatterSeries>
#include <QtGlobal>
#include <numeric>
#include <stdlib.h>
#include <QMessageBox>
#include <QStackedWidget>
#include "backtestengine.h"
#include "dataloader.h"
#include "strategy.h"
#include "smastrategy.h"
#include "minestrategy.h"
#include "chartview.h"
class BackTestWidget : public QWidget
{
    Q_OBJECT
public:
    explicit BackTestWidget(QWidget *parent = nullptr);
    ~BackTestWidget();

signals:


private slots:
    // 加载数据文件
    void loadData() ;
    // 生成测试数据
    void generateTestData();
    // 当图标大小调整时更新所有可缩放图标/标记
    void updateIconSizes() ;

    // 运行回测
    void runBacktest();

private:
    // 创建控制面板
    void createControlPanel(QVBoxLayout* mainLayout);

    // 创建图表标签页
    void createChartTab();

    // 创建交易记录标签页
    void createTradesTab();
    // 创建回测结果标签页
    void createResultsTab();

    // 更新图表
    void updateChart(bool showTrades = false);


    // 更新交易记录表格
    void updateTradesTable();


    // 更新回测结果
    void updateResults();

    //选择策略
    void selectStrategy(int index);

    //选择资金费率
    // void seletFee(int index);

    //设置索引
    //void indexConfirm(int index);

private:
    //策略页索引
    int m_index=0;

    // UI组件
    QStackedWidget*widget_strategy=nullptr;
    QTabWidget* m_tabWidget = nullptr;
    QLabel* m_dataFileLabel = nullptr;
    QSpinBox* m_shortPeriodSpin = nullptr;
    QSpinBox* m_longPeriodSpin = nullptr;
    QDoubleSpinBox* m_initialBalanceSpin = nullptr;
    QSpinBox* m_iconSizeSpin = nullptr;
    QVector<QPushButton*> m_iconButtons;

    // 图表相关
    QChart* m_chart = nullptr;
    ChartView* m_chartView = nullptr;
    QCandlestickSeries* m_candleSeries = nullptr;
    QScatterSeries* m_buySeries = nullptr;
    QScatterSeries* m_sellSeries = nullptr;
    QLineSeries* m_shortSMASeries = nullptr;
    QLineSeries* m_longSMASeries = nullptr;
    QLineSeries* m_balanceSeries = nullptr;
    QDateTimeAxis* m_axisX = nullptr;
    QValueAxis* m_axisY = nullptr;
    QValueAxis* m_axisY2 = nullptr;

    // 交易记录表格
    QTableWidget* m_tradesTable = nullptr;

    // 回测结果
    QTextEdit* m_resultsText = nullptr;

    // 数据和引擎
    QVector<CandleData> m_data;
    Strategy* m_strategy = nullptr;
    BacktestEngine* m_backtestEngine = nullptr;
    MineStrategy*m_minStrategy=nullptr;
};

#endif // BACKTESTWIDGET_H
